/*
 * SortedClassifications.java
 */
package OrderedCoverPackage;

import OLDSTUFF.HierarchyPackage.HClass;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * @author Martin Haulrich
 */
public interface SortedClassifications {

    /**
     * Add datapoints to the pool.
     * This is done when datapoints that previously has been moved to subpartitions are moved bak up because of merges.
     */
    void add(Set<Integer> addedPoints);

    /**
     * Put a classification back in the list of classifications.
     */
    void addClass(HClass c);

    /**
     * Remove a classification from the list oc classifications.
     * @param c Class to remove.
     */
    void removeClass(HClass c);

    public void removeClasses(Collection<HClass> c);

    /**
     * Get data for a given class.
     * Returns the points from the classified dataset in this class that is still in the pool. I.e. the points that has not been moved to subpartitions.
     */
    Set<Integer> getData(HClass c);

    /**
     * Return the largest class and remove it from the set.
     */
    HClass getFirstClass();

    HClass getFirstClassNoRemove();

    public List<HClass> getNBestNoRemove(int N);
    /**
     * Returns the size of the largest class
     */
//    int getMaxCount();
    boolean isEmpty();

    /**
     * Remove datapoints from the pool.
     * This is done when points have moved to a subpartition
     */
    void remove(Set<Integer> removedPoints);

    public Set<Integer> getPool();
}
